#include "execute_task.h"

TaskHandle_t executeHandler;

//把处理好的数据直接取过来使用
extern GatherDataTarget dataTarget;

THData tHData;

//执行和控制的函数声明
void alarmContrl();//报警
void showContrl();//显示
void airConditioningContrl();//空调
void curtainContrl();//窗帘

void init_execute_task()
{
    //当重新开机的时候，从EEPROM中加载用户配置的数据？用户没有配置数据？
    if(tHData.state==0)//先安排一点默认值 --后面要改
    {
        /*
        tHData.state=15; //  1111
        tHData.tempMax=60;
        tHData.humiMax=90;
        tHData.smokeMax=80;
        tHData.sunshineMax=80;
        loadThdata(&tHData);
        */
    }
    //用到的外设的初始化  显示-I2C   报警-蜂鸣器   LED灯-闪烁  控制窗帘-控制电机  空调-红外
    ledInit();
    OLED_Init();
    BEEP_Init();
}

//执行模块加载 采集的数据 然后进行对应的功能控制
void execute_task(void *param)
{
    /*
        1.考虑 设备刚刚出来 eeprom里面也没有数据
        2.如果里面更新了数据，立即生效
        
    */
    int timers =0;//次数
    int flag =0;//还没有加载到数
    while (1)
    {
          if(!flag)
          {
            if(tHData.state==0){//先安排一点默认值 --后面要改                
                if(timers>10){
                    tHData.state=15; //  1111
                    tHData.tempMax=60;
                    tHData.humiMax=90;
                    tHData.smokeMax=80;
                    tHData.sunshineMax=80;
                    flag=1;
                }
                timers++;
                if(!loadThdata(&tHData)){
                    continue;
                }else{
                    flag=1;
                }    
            }     
        }
        //根据用户的配置执行对应的功能
        if(tHData.state&0x01){//显示
            showContrl();
        }
        if(tHData.state&0x02){//报警
            alarmContrl();
        }
        if(tHData.state&0x04){//控制空调
            airConditioningContrl();
        }
        if(tHData.state&0x08){//控制窗帘
            curtainContrl();
        }

        vTaskDelay(500);
    }
    
}

void create_execute_task(){
    //创建一个任务  这个任务的目的就是去创建其他的任务
    //创建任务
    BaseType_t res= xTaskCreate(execute_task,
                "execute_task",
                128,
                NULL,
                2,
                &executeHandler);

    if(res==pdPASS){
        printf("execute_task create success! \r\n");
    }else{
        printf("execute_task create error! \r\n");
    }
}
    
//报警
void alarmContrl(){
    u8 flag=0;
    //温度
    if(dataTarget.temp>tHData.tempMax){
        //1.LED1灯点亮 蜂鸣器报警
        LED1=0;
        flag=1;
    }else{
         LED1=1;
    }
    if(dataTarget.humi>tHData.humiMax){
        //1.LED2灯点亮 蜂鸣器报警
        LED2=0;
        flag=1;
    }else{
        LED2=1;
    }
    if(dataTarget.sunshine>tHData.sunshineMax){
        //1.LED1灯点亮 蜂鸣器报警
        LED3=0;
        flag=1;
    }else{
         LED3=1;
    }
    if(dataTarget.smoke>tHData.smokeMax){
        //1.LED1灯点亮 蜂鸣器报警
        LED4=0;
        flag=1;
    }else{
        LED4=1;
    }
    if (!dataTarget.raidrop)
    {
        LED5=0; 
        flag=1;
    }else{
        LED5=1;
    }
    
    if (flag)
    {
        while (1)
        {
            BEEP_Alarm(100,100);
            vTaskDelay(10);
        }        
    }

}
//显示
void showContrl(){
    OLED_Clear();
	OLED_ShowString(0,0,  "Temp:   C",12);
	OLED_ShowString(0,15, "Humi:   %",12);
	OLED_ShowString(0,30, "SOMKE:   %",12);
	OLED_ShowString(0,45, "sunshine:   %",12);

    OLED_ShowNum(5*6,0,dataTarget.temp,3,12);
	OLED_ShowNum(5*6,15,dataTarget.humi,3,12);
	OLED_ShowNum(6*6,30,dataTarget.smoke,3,12);
	OLED_ShowNum(9*6,45,dataTarget.sunshine,3,12);
	OLED_Refresh_Gram();

}
//空调
void airConditioningContrl(){


}
//窗帘
void curtainContrl(){


}
//放在配置类逻辑的数据设置到执行模块
void setThdata(THData tempData)
{
    tHData=tempData;

}

